package cn.stylefeng.guns.modular.erlove.service.impl;



import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.guns.core.exception.ServiceException;
import cn.stylefeng.guns.core.factory.PageFactory;
import cn.stylefeng.guns.core.pojo.page.PageResult;
import cn.stylefeng.guns.modular.erlist.service.ErListService;
import cn.stylefeng.guns.modular.erlove.entity.ErLove;
import cn.stylefeng.guns.modular.erlove.enums.ErLoveExceptionEnum;
import cn.stylefeng.guns.modular.erlove.mapper.ErLoveMapper;
import cn.stylefeng.guns.modular.erlove.model.param.ErLoveParam;
import cn.stylefeng.guns.modular.erlove.service.ErLoveService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 点赞 服务实现类
 *
 * @author w
 * @date 2021/06/11 15:02
 */
@Service
public class ErLoveServiceImpl extends ServiceImpl<ErLoveMapper, ErLove> implements ErLoveService {

    ErListService erListService ;

    @Override
    public PageResult<ErLove> page(ErLoveParam erLoveParam) {

        // 构造条件
        LambdaQueryWrapper<ErLove> queryWrapper = new LambdaQueryWrapper<>();

        // 查询分页结果
        return new PageResult<>(this.page(PageFactory.defaultPage(), queryWrapper));
    }

    @Override
    public List<ErLove> list(ErLoveParam erLoveParam) {

        // 构造条件
        LambdaQueryWrapper<ErLove> queryWrapper = new LambdaQueryWrapper<>();

        return this.list(queryWrapper);
    }

    @Override
    public int love(ErLoveParam erLoveParam) {
        // 将dto转为实体
        int state ;  // 1:  点赞成功   0：取消点赞
        LambdaQueryWrapper<ErLove> queryWrapper = new LambdaQueryWrapper<>();
        if(ObjectUtil.isNotEmpty(erLoveParam)) {
            queryWrapper.and(q -> q.eq(ErLove::getEid,erLoveParam.getEid())
                    .eq(ErLove::getUid,erLoveParam.getUid()));
        }
        List<ErLove> list = this.list(queryWrapper);
        if(list.size() == 0 )
        {
            ErLove erLove = new ErLove();
            BeanUtil.copyProperties(erLoveParam, erLove);
            this.save(erLove);
            state = 1;
            this.baseMapper.addlike(erLoveParam.getEid());
        }else{
            this.remove(queryWrapper);
            state = 0;
            this.baseMapper.offlike(erLoveParam.getEid());
        }
        return state;
    }

    @Override
    public int showLoveState(ErLoveParam erLoveParam) {
        // 将dto转为实体
        int state ;  // 1:  已点赞   0：未点赞
        LambdaQueryWrapper<ErLove> queryWrapper = new LambdaQueryWrapper<>();
        if(ObjectUtil.isNotEmpty(erLoveParam)) {
            queryWrapper.and(q -> q.eq(ErLove::getEid,erLoveParam.getEid())
                    .eq(ErLove::getUid,erLoveParam.getUid()));
        }
        ErLove erLove =  this.getOne(queryWrapper);
        if(!ObjectUtil.isNotNull(erLove))
        {
            state = 0;
        }else{
            state = 1;
        }
        return state;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete(ErLoveParam erLoveParam) {
        this.removeById(erLoveParam.getEid());
    }

    @Override
    public void edit(ErLoveParam erLoveParam) {

        // 根据id查询实体
        ErLove erLove = this.queryErLove(erLoveParam);

        // 请求参数转化为实体
        BeanUtil.copyProperties(erLoveParam, erLove);

        this.updateById(erLove);
    }

    @Override
    public ErLove detail(ErLoveParam erLoveParam) {
        return this.queryErLove(erLoveParam);
    }



    /**
     * 获取点赞
     *
     * @author w
     * @since 2021/06/11 15:02
     */
    private ErLove queryErLove(ErLoveParam erLoveParam) {
        ErLove erLove = this.getById(erLoveParam.getEid());
        if (ObjectUtil.isEmpty(erLove)) {
            throw new ServiceException(ErLoveExceptionEnum.NOT_EXISTED);
        }
        return erLove;
    }
}